<template>
  <div :class="className" :style="{height:height,width:width}" />
</template>

<script>
import * as echarts from 'echarts'
require('echarts/theme/macarons') // echarts theme
import resize from './mixins/resize'

const animationDuration = 3000

export default {
  mixins: [resize],
  props: {
    className: {
      type: String,
      default: 'chart'
    },
    width: {
      type: String,
      default: '100%'
    },
    height: {
      type: String,
      default: '425px'
    },
    options:{
      type:Array,
      default: [{
        radar:{
          indicator: [
            { name: 'Sales', max: 10000 },
            { name: 'Administration', max: 20000 },
            { name: 'Information Techology', max: 20000 },
            { name: 'Customer Support', max: 20000 },
            { name: 'Development', max: 20000 },
            { name: 'Marketing', max: 20000 }
          ],
        },
      }]
    },
    radData:{
      type:Array,
      default: function(){
        return [
          {
            value: [5000, 7000, 12000, 11000, 15000, 14000],
            name: 'Allocated Budget'
          },
          {
            value: [4000, 9000, 15000, 15000, 13000, 11000],
            name: 'Expected Spending'
          },
          {
            value: [5500, 11000, 12000, 15000, 12000, 12000],
            name: 'Actual Spending'
          }
        ]
      }
    }
  },
  data() {
    return {
      chart: null,
      showOptions:null,
      showData:null,
    }
  },
  mounted() {
    this.$nextTick(() => {
      this.initChart()
    })
  },
  beforeDestroy() {
    if (!this.chart) {
      return
    }
    this.chart.dispose()
    this.chart = null
  },
  methods: {
    initChart() {
      this.chart = echarts.init(this.$el, 'macarons',{ devicePixelRatio: window.devicePixelRatio * 2 })
      this.chart.setOption({
        tooltip: {
          trigger: 'axis',
          // 坐标轴指示器，坐标轴触发有效
          axisPointer: {
            // 默认为直线，可选为：'line' | 'shadow'
            type: 'shadow' // 默认为直线，可选为：'line' | 'shadow'
          }
        },
        // 雷达图坐标系组件，只适用于雷达图。
        radar: {
          // 圆的半径，数组的第一项是内半径，第二项是外半径。
          radius: '70%',
          // 圆中心坐标，数组的第一项是横坐标，第二项是纵坐标。[ default: ['50%', '50%'] ]
          center: ['50%', '42%'],
          // (这里是圆的环数)指示器轴的分割段数。[ default: 5 ]
          splitNumber: 5,
          // 坐标系起始角度，也就是第一个指示器轴的角度。[ default: 90 ]
          startAngle: 90,
          // (圆外的标签)雷达图每个指示器名称的配置项。
          axisName: {
            formatter: '{value}',
            fontSize: 14,
            color: 'rgb(0,0,0)'
          },
          // 指示器名称和指示器轴的距离。[ default: 15 ]
          axisNameGap: 15,
          // 坐标轴在 grid 区域中的分隔区域，默认不显示。
          splitArea: {
            // 分隔区域的样式设置。
            areaStyle: {
              // 分隔区域颜色。分隔区域会按数组中颜色的顺序依次循环设置颜色。默认是一个深浅的间隔色。
              color: 'rgba(151,168,190,0.64)',
              opacity: 0.8,
              shadowBlur: 45,
              shadowColor: 'rgba(0,0,0,0.74)',
              shadowOffsetX: 0,
              shadowOffsetY: 15
            }
          },
          axisLine: {
            lineStyle: {
              color: 'rgba(151,168,190,0.65)'
            }
          },
          // 雷达图的指示器，用来指定雷达图中的多个变量（维度）,跟data中 value 对应
          indicator: this.showOptions.radar.indicator,
        },
        legend: {
          // 图例距离左侧边距
          left: 'center',
          bottom: '10',
          data: ['能力分布图'],
        },
        toolbox: {
          show: true,
          feature: {
            mark: { show: true},
            // 点击小图标数据详情的显示与隐藏
            dataView: { show: false, readOnly: false },
            // 刷新图表按键的显示与隐藏
            restore: { show: false },
            // 保存图表按键的显示与隐藏
            saveAsImage: { show: true }
          }
        },
        series: [{
          //标题名称
          name: '雷达图',
          // 系列类型: 雷达图
          type: 'radar',
          // 折线拐点标志的样式。
          itemStyle: {
            // 拐点的描边颜色。[ default: '#000' ]
            borderColor: 'rgb(2,82,255)',
            // 拐点的描边宽度，默认不描边。[ default: 0 ]
            borderWidth: 3,
            // 单项线条样式。
            lineStyle: {
              width: 1
            },
            // 图形透明度
            opacity: 0.4,
          },
          symbolSize: 0,
          areaStyle: {
            // 填充的颜色。[ default: "#000" ]
            color: 'rgb(2,82,255)',
            shadowBlur: 13,
            shadowColor: 'rgba(0,0,0,0.41)',
            shadowOffsetX: 0,
            shadowOffsetY: 10,
            // 图形透明度
            opacity: 0.4
          },
          label: { // 单个拐点文本的样式设置
            show: true,
            // 单个拐点文本的样式设置。[ default: false ]
            position: 'inside',
            // 标签的位置。[ default: top ]
            distance: 4,
            // 距离图形元素的距离。当 position 为字符描述值（如 'top'、'insideRight'）时候有效。[ default: 5 ]
            color: 'rgba(0,0,0,0.8)',
            // 文字的颜色。如果设置为 'inherit'，则为视觉映射得到的颜色，如系列色。[ default: "#fff" ]
            fontSize: 12,
            // 图形透明度
            opacity: 1,
            // 文字的字体大小
            formatter: function(params) {
              return Math.round(params.value);
            }
          },
          data: this.showData,
          animationDuration: animationDuration
        }]
      })
    }
  },
  watch:{
    options:{
      handler(newVal, oldVal) {
        if (newVal){
          this.showOptions = this.options[0];
        }
      },immediate:true,deep:true
    },
    radData:{
      handler(newVal, oldVal) {
        if (newVal){
          this.showData = this.radData;
        }
      },immediate:true,deep:true
    },
  }
}
</script>
